package com.class05;


//        1. **添加图书**：确保添加的图书ID不重复。
//        2. **删除图书**：通过图书ID来删除图书，而不是通过对象比较，因为对象比较可能会因为对象引用不同而失败。
//        3. **修改图书**：通过图书ID来查找并修改图书信息。
//        4. **查询图书**：增加通过ID查询图书的逻辑。
//        5. **用户交互**：完善用户交互逻辑，使其能够处理用户输入并执行相应的操作。


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
//  1、创建一个类，用于表示图书信息，包括图书编号、图书名称、作者和价格。
class Books {
    //    2、生成get、set方法、构造方法、toString方法。alt +insert
    private Integer id;
    private String name;
    private String author;
    private Double price;

    public Books() {
    }

    @Override
    public String toString() {
        return "Books{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", id=" + id +
                '}';
    }

    public Books(Integer id, String name, String author, Double price) {
        this.id = id;
        this.name = name;
        this.author = author;
        this.price = price;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }
}

class TestBook {
    //    定义一个静态的List集合，用于存储图书信息。
    private static List<Books> books = new ArrayList<>();

    //    静态代码块，用于初始化图书信息。
    static {
        books.add(new Books(1, "java从入门到精通",
                "张三", 99.9));
        books.add(new Books(2, "java从入门到大数据",
                "李四", 99.9));
    }

//    添加图书方法

    public static void addBook(Books book) {
        for (Books b : books) {
            if (b.getId().equals(book.getId())) {
                System.out.println("添加失败，图书ID已存在。");
                return;
            }
        }
        books.add(book);
        System.out.println("图书添加成功。");
    }

//    通过图书ID删除图书

    public static void removeBook(Integer id) {
        for (Books book : books) {
            if (book.getId().equals(id)) {
                books.remove(book);
                System.out.println("图书删除成功。");
                return;
            }
        }
        System.out.println("删除失败，未找到该图书。");
    }


    //    更新图书的方法
    public static void updateBook(Books book) {
        for (int i = 0; i < books.size(); i++) { //遍历书的集合
            if (books.get(i).getId().equals(book.getId())) { //获取当前图书与传入的图书ID是否相等
//                将当前图书替换为传入的图书
//                i就是索引
                books.set(i, book);
                System.out.println("图书更新成功。");
                return;
            }
        }
        System.out.println("更新失败，未找到该图书。");
    }

    //    查询所有图书的方法
    public static List<Books> getBooks() {
        return books;
    }


    //    通过图书ID查询图书的方法
    public static Books getBookById(Integer id) {
        for (Books book : books) {
            if (book.getId().equals(id)) {
                return book;
            }
        }
        return null;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("请选择操作（1-新增、2-删除、3-修改、4-查询所有、5-通过id查询、0-退出）");
            String choice = scanner.next();
            switch (choice) {
                case "1":
                    System.out.println("请输入图书编号：");
                    Integer id = scanner.nextInt();
                    System.out.println("请输入图书名称：");
                    String name = scanner.next();
                    System.out.println("请输入图书作者：");
                    String author = scanner.next();
                    System.out.println("请输入图书价格：");
                    Double price = scanner.nextDouble();
                    addBook(new Books(id, name, author, price));
                    break;
                case "2":
                    System.out.println("请输入要删除的图书编号：");
                    Integer removeId = scanner.nextInt();
                    removeBook(removeId);
                    break;
                case "3":
                    System.out.println("请输入要修改的图书编号：");
                    Integer updateId = scanner.nextInt();
                    Books bookToUpdate = getBookById(updateId);
                    if (bookToUpdate != null) { //表示集合存在该图书
                        System.out.println("请输入新的图书名称：");
                        String newName = scanner.next();
                        System.out.println("请输入新的图书作者：");
                        String newAuthor = scanner.next();
                        System.out.println("请输入新的图书价格：");
                        Double newPrice = scanner.nextDouble();
                        bookToUpdate.setName(newName);
                        bookToUpdate.setAuthor(newAuthor);
                        bookToUpdate.setPrice(newPrice);
                        updateBook(bookToUpdate);
                    } else {
                        System.out.println("未找到该图书。");
                    }
                    break;
                case "4":
                    List<Books> booksList = getBooks();
                    for (Books books1 : booksList) {
                        System.out.println(books1);
                    }
//                    booksList.forEach(System.out::println);
                    break;
                case "5":
                    System.out.println("请输入要查询的图书编号：");
                    Integer queryId = scanner.nextInt();
                    Books bookToQuery = getBookById(queryId);
                    if (bookToQuery != null) {  //找到该图书了，输出该图书信息
                        System.out.println(bookToQuery);
                    } else {
                        System.out.println("未找到该图书。");
                    }
                    break;
                case "0":
                    System.out.println("退出系统。");
                    scanner.close();
                    return;
                default:
                    System.out.println("无效的操作，请重新输入。");
                    break;
            }
        }
    }
}

//这个代码现在包含了基本的图书管理功能，包括添加、删除、修改和查询图书。
// 用户可以通过控制台输入选择进行不同的操作。
